package com.crm.api.service;

import com.crm.api.entity.Employee;

import java.util.List;
import java.util.Map;

/**
 * 员工服务接口
 */
public interface EmployeeService {

    /**
     * 获取员工列表（支持分页和筛选）
     */
    Map<String, Object> getEmployees(Integer page, Integer size, String realName, 
                                   String username, String department, String position, 
                                   String role, Boolean isActive);

    /**
     * 根据ID获取员工详情
     */
    Employee getEmployeeById(Integer id);

    /**
     * 根据用户名获取员工信息
     */
    Employee getEmployeeByUsername(String username);

    /**
     * 创建员工
     */
    Employee createEmployee(Employee employee);

    /**
     * 更新员工
     */
    Employee updateEmployee(Employee employee);

    /**
     * 删除员工
     */
    boolean deleteEmployee(Integer id);

    /**
     * 重置员工密码
     */
    boolean resetPassword(Integer id, String password);

    /**
     * 更新员工状态
     */
    boolean updateEmployeeStatus(Integer id, Boolean isActive);

    /**
     * 获取部门列表
     */
    List<String> getDepartments();

    /**
     * 获取职位列表
     */
    List<String> getPositions();

    /**
     * 检查用户名是否已存在
     */
    boolean existsByUsername(String username);

    /**
     * 检查用户名是否已被其他记录使用
     */
    boolean existsByUsernameAndNotId(String username, Integer id);

    /**
     * 检查员工编号是否已存在
     */
    boolean existsByEmployeeCode(String employeeCode);

    /**
     * 检查员工编号是否已被其他记录使用
     */
    boolean existsByEmployeeCodeAndNotId(String employeeCode, Integer id);

    /**
     * 检查是否有关联的业务
     */
    boolean hasRelatedBusinesses(Integer id);

    /**
     * 检查是否有关联的工单
     */
    boolean hasRelatedWorkOrders(Integer id);
}